package main

import "fmt"

/*
	管道的状态：
		1. 就绪
		 	- 可读；
		 	- 可写；
		2. 关闭
			- 写：会抛出panic；
			- 读：会一直读到值，管道内尚有内容则读对应内容，没有则读到对应类型的初始值；第二个接收值会一直读到true，直到管道没内容变为false
		3. 未初始化
			- 写：可堵塞则堵塞
			- 读：可堵塞则堵塞
		4. 等待就绪：
			- 写：堵塞
			- 读：堵塞
*/

func main() {
	var cha1 = make(chan int, 5)
	for i := 0; i < 5; i++ {
		cha1 <- i + 1
	}

	// 循环遍历前需关闭管道，否则会发生堵塞（死锁）
	close(cha1)

	// 循环遍历管道，管道没有index，只需接收值
	for val := range cha1 {
		fmt.Println(val)
	}
}
